home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-04 / modula2f.zip / GRAPHICS.MOD < prev    next >
Text File  |  1992-05-01  |  4KB  |  213 lines

  1. IMPLEMENTATION MODULE Graphics;
  2.  FROM SYSTEM IMPORT ASSEMBLER;
  3.  FROM MathLib0 IMPORT sqrt,entier,real;
  4.  FROM Text IMPORT WriteInt;
  5.  
  6.  PROCEDURE SetCga320();
  7.     BEGIN
  8.         ASM
  9.             MOV AX,4
  10.             INT 10H
  11.         END;
  12.     END SetCga320;
  13.  
  14.  PROCEDURE SetCgaMono();
  15.     BEGIN
  16.         ASM
  17.             MOV AX,6
  18.             INT 10H
  19.         END;
  20.     END SetCgaMono;
  21.  
  22.  PROCEDURE SetEga320();
  23.     BEGIN
  24.         ASM
  25.             MOV AX,13
  26.             INT 10H
  27.         END;
  28.     END SetEga320;
  29.  
  30.  PROCEDURE SetEga640();
  31.     BEGIN
  32.         ASM
  33.             MOV AX,14
  34.             INT 10H
  35.         END;
  36.     END SetEga640;
  37.  
  38.  PROCEDURE SetPlus();
  39.     BEGIN
  40.         ASM
  41.             MOV AX,16
  42.             INT 10H
  43.         END;
  44.     END SetPlus;
  45.  
  46.  PROCEDURE SetTandy();
  47.     BEGIN
  48.         ASM
  49.             MOV AH,5
  50.             MOV AL,80H
  51.             INT 10H
  52.             DEC BH
  53.             DEC BL
  54.             MOV AH,5
  55.             MOV AL,83H
  56.             INT 10H
  57.             MOV AX,9
  58.             INT 10H
  59.         END;
  60.     END SetTandy;
  61.  
  62.  PROCEDURE SetBackground(color:INTEGER);
  63.     BEGIN
  64.         color:=color MOD 16;
  65.         ASM
  66.             MOV AH,11
  67.             XOR BH,BH
  68.             MOV BL,color
  69.             INT 10H
  70.         END;
  71.     END SetBackground;
  72.  
  73.  PROCEDURE Dot(color,xloc,yloc:INTEGER);
  74.     BEGIN
  75.         color:=color MOD 16;
  76.         ASM
  77.             MOV CX,xloc
  78.             MOV DX,yloc
  79.             MOV AL,color
  80.             MOV AH,12
  81.             INT 10H
  82.         END;
  83.     END Dot;
  84.  
  85.  PROCEDURE Box(color,x1,y1,x2,y2:INTEGER);
  86.   VAR i:INTEGER;
  87.   BEGIN
  88.     IF x1>x2 THEN
  89.         i:=x1;
  90.         x1:=x2;
  91.         x2:=i;
  92.     END;
  93.     IF y1>y2 THEN
  94.         i:=y1;
  95.         y1:=y2;
  96.         y2:=i;
  97.     END;
  98.     ASM
  99.         MOV AL,color
  100.         MOV AH,12
  101.         MOV CX,x1
  102.         MOV DX,y1
  103.         INT 10H
  104.   ULOP: INC CX
  105.         INT 10H
  106.         CMP CX,x2
  107.         JL ULOP
  108.   RLOP: INC DX
  109.         INT 10H
  110.         CMP DX,y2
  111.         JL RLOP
  112.   DLOP: DEC CX
  113.         INT 10H
  114.         CMP CX,x1
  115.         JG DLOP
  116.   LLOP: DEC DX
  117.         INT 10H
  118.         CMP DX,y1
  119.         JG LLOP
  120.     END;
  121.   END Box;
  122.  
  123.   PROCEDURE SQR(i:INTEGER):INTEGER;
  124.     VAR a,b,d:INTEGER;
  125.  
  126.     BEGIN
  127.         a:=i DIV 2;
  128.         b:=(a+i DIV a) DIV 2;
  129.         d:=b-a;
  130.         WHILE (d > 10) OR (d < -10) DO
  131.             a:=b;
  132.             b:=(a+i DIV a) DIV 2;
  133.             d:=b-a;
  134.         END; (* while *)
  135.         RETURN b;
  136.     END SQR;
  137.  
  138.   PROCEDURE Circle(color,xloc,yloc,rad:INTEGER);
  139.     VAR i,j,max:INTEGER;
  140.  
  141.     BEGIN
  142.         max:=entier((sqrt(2.0)*real(rad))/2.0);
  143.         FOR i:=0 TO max DO
  144.             j:=SQR(rad*rad-i*i);
  145.             ASM
  146.                 MOV CX,xloc
  147.                 ADD CX,i
  148.                 MOV DX,yloc
  149.                 ADD DX,j
  150.                 MOV AL,color
  151.                 MOV AH,12
  152.                 INT 10H
  153.                 SUB CX,i
  154.                 SUB CX,i
  155.                 INT 10H
  156.                 SUB DX,j
  157.                 SUB DX,j
  158.                 INT 10H
  159.                 ADD CX,i
  160.                 ADD CX,i
  161.                 INT 10H
  162.                 MOV CX,xloc
  163.                 ADD CX,j
  164.                 MOV DX,yloc
  165.                 ADD DX,i
  166.                 INT 10H
  167.                 SUB CX,j
  168.                 SUB CX,j
  169.                 INT 10H
  170.                 SUB DX,i
  171.                 SUB DX,i
  172.                 INT 10H
  173.                 ADD CX,j
  174.                 ADD CX,j
  175.                 INT 10H
  176.             END;
  177.          END;
  178.     END Circle;
  179.  
  180.   PROCEDURE Look(xloc,yloc:INTEGER):INTEGER;
  181.    VAR color:INTEGER;
  182.    BEGIN
  183.     color:=0;
  184.     ASM
  185.         MOV CX,xloc
  186.         MOV DX,yloc
  187.         MOV AH,13
  188.         INT 10H
  189.         MOV color,AL
  190.     END;
  191.     RETURN color
  192.    END Look;
  193.  
  194.  PROCEDURE Clear();
  195.   BEGIN
  196.     ASM
  197.         XOR BH,BH
  198.         MOV BL,7
  199.         MOV CX,80
  200.         XOR DX,DX
  201. LOP:    MOV AH,2
  202.         INT 10H
  203.         MOV AL,32
  204.         MOV AH,9
  205.         INT 10H
  206.         INC DH
  207.         CMP DH,25
  208.         JNE LOP
  209.     END;
  210.   END Clear;
  211.  
  212. END Graphics.
  213.